use std::collections::HashMap;

fn create_cache() -> impl FnMut(u32) -> u32 {  
    let mut cache = HashMap::new();  
    move |x| { 
        /* TODO: 缓存计算结果 */ 
        *cache.entry(x).or_insert_with(|| {
            println!("Calculating for {}...", x);
            x * 2 // 示例计算逻辑
        })
    }  
}  

#[test] 
fn test_cache() { 
    /* 验证重复调用不重复计算 */ 
    let mut cached_func = create_cache();
    
    // 首次调用应计算
    assert_eq!(cached_func(5), 10);
    
    // 二次调用应命中缓存
    assert_eq!(cached_func(5), 10);
    
    // 不同参数应重新计算
    assert_eq!(cached_func(3), 6);
}  

// 添加缓存行为演示
fn main() {
    let mut expensive_call = create_cache();
    
    println!("Call with 10: {}", expensive_call(10)); // 计算
    println!("Call with 10: {}", expensive_call(10)); // 缓存命中
    println!("Call with 7: {}", expensive_call(7));   // 计算
}